도커 컴포즈
- 단일 서버에서 여러 컨테이너를 프로젝트 단위로 묶어서 관리
- docker-compose.yml YAML 파일을 통해 명시적 관리
- 프로젝트 단위로 도커 네트워크와 볼륨 관리
- 프로젝트 내 서비스 간 의존성 정의 가능 (depends_on)
- 프로젝트 내 서비스 디스커버리 자동화
- 손 쉬운 컨테이너 수평 확장
프로젝트
- 도커 컴포즈에서 다루는 워크스페이스 단위
- 함께 관리하는 서비스 컨테이너의 묶음
- 프로젝트 단위로 기본 도커 네트워크가 생성 된다
서비스
- 도커 컴포즈에서 컨테이너를 관리하기 위한 단위
- scale을 통해 서비스 컨테이너의 수 확장 가능
컨테이너
- 서비스를 통해 컨테이너 관리
버전
- 가능한 최신 버전 사용 권장
- 버전 3부터 Docker Swarm과 호환
- Swarm 서비스를 docker-compose.yml로 정의 가능
도커 컴포즈 설치
docker-compose 설치확인
$ docker-compose version
Linux 환경은 다음 명령어로 설치
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.28.5/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose"
OR
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.28.5/docker-compose-$(uname -s)"
OR
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.28.5/docker-compose-Linux-x86_64"
실행권한 부여
# docker-compose에 실행권한 부여
$ sudo chmod +x /usr/local/bin/docker-compose
실습
- docker run으로
MySQL
,WordPress
컨테이너 생성
Dockerfile 작성
MySQL Container
docker run -d -p 3306:3306 \
-e MYSQL_ALLOW_EMPTY_PASSWORD=true \
--network=app-network \
--name mysql \
-v /mnt/Docker/mysql:/var/lib/mysql --user 1000 \
mysql:5.7
WordPress Container
docker run -d -p 8080:80 \
--network=app-network \
--name wordpress \
-v /mnt/Docker/wordpress:/var/www/html --user 1000 \
-e WORDPRESS_DB_HOST=mysql \
-e WORDPRESS_DB_NAME=wp \
-e WORDPRESS_DB_USER=wp \
-e WORDPRESS_DB_PASSWORD=wp \
wordpress:latest
YAML 작성
파일 경로
$ > vim /mnt/Docker/wp_yml/docker-compose.yml
version: '2'
services:
db:
image: mariadb:10.5
volumes:
- /mnt/Docker/mysql:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: wordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
image: wordpress:latest
volumes:
- /mnt/Docker/wp:/var/www/html
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
기존 컨테이너 삭제
쉘 스크립트 형식으로 중지해보기
# docker 컨테이너 중지
for x in $(docker ps -a | awk '{print $1}' | grep -v "[A-Z]"); do docker stop ${x}; done
# docker 컨테이너 삭제
for x in $(docker ps -a | awk '{print $1}' | grep -v "[A-Z]"); do docker rm ${x}; done
도커 커맨드로 간단하게 중지하기
docker kill $(docker ps -q) && docker rm $(docker ps -a -q)
컨테이너 배포
# 자동으로 docker-compose.yml 파일을 읽어서 컨테이너를 생성하게 됨
# -d : detatch : 백그라운드 실행
docker-compose up -d
-f 옵션
Docker compose는 기본적으로 커맨드가 실행하는 디렉토리에있는 docker-compose.yml
또는 docker-compose.yaml
를 설정파일로 사용한다.
다른이름이나 경로의 파일을 Docker-compose 설정파일로 사용하고 싶다면 -f
옵션사용
docker-compose -f /mnt/Docker/wp_yml/docker-compose.yml up -d
exec 옵션
docker-compose exec
커맨드는 실행중인 서비스 컨테이너를 대상으로 어떤 명령어를 날릴 때 사용
docker-compose exec db psql postgres postgres
실행 중인 컨테이너 목록
docker container ls | awk '{print $1 , $2 , $6 , $7}' | column -t